import { PresetColorEnum } from '@/enums/colorEnum';
import { useI18n } from '@/locale';
import { EnumSchema } from '#/common';

/** 星座枚举 */
export enum StarSignEnum {
  /** 魔羯座(12/22 - 01/19) */
  Capricorn = 1,
  /** 水瓶座(01/20 - 02/18) */
  Aquarius = 2,
  /** 双鱼座(02/19 - 03/20) */
  Pisces = 3,
  /** 白羊座(03/21 - 04/20) */
  Aries = 4,
  /** 金牛座(04/21 - 05/20) */
  Taurus = 5,
  /** 双子座(05/21 - 06/21) */
  Gemini = 6,
  /** 巨蟹座(06/22 - 07/22) */
  Cancer = 7,
  /** 狮子座(07/23 - 08/22) */
  Leo = 8,
  /** 处女座(08/23 - 09/22) */
  Virgo = 9,
  /** 天秤座(09/23 - 10/23) */
  Libra = 10,
  /** 天蝎座(10/24 - 11/21) */
  Scorpio = 11,
  /** 射手座(11/22 - 12/21) */
  Sagittarius = 12,
}

/** 星座实体 */
export class StarSignEnumEntity {
  /** 星座 */
  StarSign: StarSignEnum;
  /** 显示描述 */
  Display: string;
  /** 颜色 */
  Color?: PresetColorEnum | string;
  /** 图标 */
  Icon?: string;

  constructor(starSign: StarSignEnum, color?: PresetColorEnum | string) {
    const { t } = useI18n();
    this.StarSign = starSign;
    this.Color = color;
    switch (starSign) {
      case StarSignEnum.Capricorn:
        // this.Display = '魔羯座';
        this.Display = t('enum.starSign.capricorn');
        this.Color = this.Color ? this.Color : '#9932CD'; // 魔羯座(12/22 - 01/19)：紫色
        this.Icon = 'noto-v1:capricorn';
        break;
      case StarSignEnum.Aquarius:
        // this.Display = '水瓶座';
        this.Display = t('enum.starSign.aquarius');
        this.Color = this.Color ? this.Color : '#1E90FF'; // 水瓶座(01/20 - 02/18)：水蓝色
        this.Icon = 'noto-v1:aquarius';
        break;
      case StarSignEnum.Pisces:
        // this.Display = '双鱼座';
        this.Display = t('enum.starSign.pisces');
        this.Color = this.Color ? this.Color : '#00456b'; // 双鱼座(02/19 - 03/20)：海蓝色
        this.Icon = 'noto-v1:pisces';
        break;
      case StarSignEnum.Aries:
        // this.Display = '白羊座';
        this.Display = t('enum.starSign.aries');
        this.Color = this.Color ? this.Color : '#DC143C'; // 白羊座(03/21 - 04/20)：红色
        this.Icon = 'noto-v1:aries';
        break;
      case StarSignEnum.Taurus:
        // this.Display = '金牛座';
        this.Display = t('enum.starSign.taurus');
        this.Color = this.Color ? this.Color : '#008B8B'; // 金牛座(04/21 - 05/20)：青色
        this.Icon = 'noto-v1:taurus';
        break;
      case StarSignEnum.Gemini:
        // this.Display = '双子座';
        this.Display = t('enum.starSign.gemini');
        this.Color = this.Color ? this.Color : '#A52A2A'; // 双子座(05/21 - 06/21)：褐色
        this.Icon = 'noto-v1:gemini';
        break;
      case StarSignEnum.Cancer:
        // this.Display = '巨蟹座';
        this.Display = t('enum.starSign.cancer');
        this.Color = this.Color ? this.Color : '#808080'; // 巨蟹座(06/22 - 07/22)：灰色
        this.Icon = 'noto-v1:cancer';
        break;
      case StarSignEnum.Leo:
        // this.Display = '狮子座';
        this.Display = t('enum.starSign.leo');
        this.Color = this.Color ? this.Color : '#f8cd46'; // 狮子座(07/23 - 08/22)：黄色
        this.Icon = 'noto-v1:leo';
        break;
      case StarSignEnum.Virgo:
        // this.Display = '处女座';
        this.Display = t('enum.starSign.virgo');
        this.Color = this.Color ? this.Color : '#FF1493'; // 处女座(08/23 - 09/22)：粉色
        this.Icon = 'noto-v1:virgo';
        break;
      case StarSignEnum.Libra:
        // this.Display = '天秤座';
        this.Display = t('enum.starSign.libra');
        this.Color = this.Color ? this.Color : '#3CB371'; // 天秤座(09/23 - 10/23)：绿色
        this.Icon = 'noto-v1:libra';
        break;
      case StarSignEnum.Scorpio:
        // this.Display = '天蝎座';
        this.Display = t('enum.starSign.scorpio');
        this.Color = this.Color ? this.Color : '#1c2241'; // 天蝎座(10/24 - 11/21)：黑色
        this.Icon = 'noto-v1:scorpio';
        break;
      case StarSignEnum.Sagittarius:
        // this.Display = '射手座';
        this.Display = t('enum.starSign.sagittarius');
        this.Color = this.Color ? this.Color : '#FF8C00'; // 射手座(11/22 - 12/21)：橙色
        this.Icon = 'noto-v1:sagittarius';
        break;
    }
  }
}

// #region 获取星座枚举架构
/**
 * 获取星座枚举架构
 */
export function getStarSignEnumSchema(enableTag = true): EnumSchema[] {
  const enumSchema: EnumSchema[] = [];
  const entities: StarSignEnumEntity[] = [
    new StarSignEnumEntity(StarSignEnum.Capricorn), // 魔羯座(12/22 - 01/19)：紫色
    new StarSignEnumEntity(StarSignEnum.Aquarius), // 水瓶座(01/20 - 02/18)：水蓝色
    new StarSignEnumEntity(StarSignEnum.Pisces), // 双鱼座(02/19 - 03/20)：海蓝色
    new StarSignEnumEntity(StarSignEnum.Aries), // 白羊座(03/21 - 04/20)：红色
    new StarSignEnumEntity(StarSignEnum.Taurus), // 金牛座(04/21 - 05/20)：青色
    new StarSignEnumEntity(StarSignEnum.Gemini), // 双子座(05/21 - 06/21)：褐色
    new StarSignEnumEntity(StarSignEnum.Cancer), // 巨蟹座(06/22 - 07/22)：灰色
    new StarSignEnumEntity(StarSignEnum.Leo), // 狮子座(07/23 - 08/22)：黄色
    new StarSignEnumEntity(StarSignEnum.Virgo), // 处女座(08/23 - 09/22)：粉色
    new StarSignEnumEntity(StarSignEnum.Libra), // 天秤座(09/23 - 10/23)：绿色
    new StarSignEnumEntity(StarSignEnum.Scorpio), // 天蝎座(10/24 - 11/21)：黑色
    new StarSignEnumEntity(StarSignEnum.Sagittarius), // 射手座(11/22 - 12/21)：橙色
  ];
  entities.forEach((item) => {
    enumSchema.push({
      key: item.StarSign as number,
      label: item.Display,
      value: item.StarSign as number,
      tag: enableTag,
      tagColor: item.Color,
      // tagIcon: item.Icon,
    });
  });
  return enumSchema;
}
// #endregion
